万兆NAS记录 您所在的位置:网站首页 SRIOV 交换机 万兆NAS记录

万兆NAS记录

2023-08-15 04:50| 来源: 网络整理| 查看: 265

0x00 前提

万兆的起源是发现了FLR和OCP, 虽然发现的时候已经很晚了, 价格上还是比较有优势的, 假垃圾佬上线.

我的万兆配置:交换机: H3C S5130S-28S-SIEPYC机器(PVE+TrueNAS): 530FLR 双口LACP蜗牛星际(G4560 + ESXi 7): CX3 ALOM直接虚拟交换机(本来想用CX341A,发现厚度超了, 341a就暂时吃灰了)测试环境: PVE(EPYC) + ESXi(蜗牛G4560)

注: 以下大多数配置记录都是在Debian10/11或TrueNas里配置

0x01 主力NAS 530FLR记录

先说530FLR, 芯片BCM57810s, 买来后发现直接就支持SRIOV的固件, 所以没有折腾刷固件, 直接启动rom里修改配置就ok

12root@pve00:~# cat /sys/class/net/enp65s0f0/device/sriov_totalvfs16

开启sriov的命令很简单也很通用, 直接sysfs就可以: echo 2 > /sys/class/net/enp65s0f0/device/sriov_numvfs设置VF的mac才能正常使用, ip link set vf mac

当时写在启动hook里的脚本:

1234567891011121314# SR-IOV for BCM57810echo "reset SR-IOV for enp65s0"echo 0 > /sys/class/net/enp65s0f0/device/sriov_numvfsecho 0 > /sys/class/net/enp65s0f1/device/sriov_numvfsecho "set numvfs for enp65s0"echo 2 > /sys/class/net/enp65s0f0/device/sriov_numvfsecho 2 > /sys/class/net/enp65s0f1/device/sriov_numvfs### SET MAC (TrueNas vf not set)## ip link set vf mac #ip link set enp65s0f0 vf 0 mac 38:63:bb:41:df:b0ip link set enp65s0f0 vf 1 mac 38:63:bb:41:df:b1#ip link set enp65s0f1 vf 0 mac 38:63:bb:41:df:c0ip link set enp65s0f1 vf 1 mac 38:63:bb:41:df:c1

然而最终因为各种考虑, 还是取消了SR-IOV直接直通给TrueNAS了, 所以以下记录仅作为记录, 日后万一有需求了,做参考

防坑记录(注意事项) 如果要给VM使用, 需要在VM启动前准备好VF, 包括开VF和设置MAC 如果vm里要给vf设置mac地址,就别在host里设置mac了, vm里不支持设置和host不一样的mac Debian10里测试正常, 到了TrueNas的bonding, 会有更改mac的操作, 会报错enp1s0设置mac地址失败,不知道是不是包还是操作不一样(比如一个是设置混杂一个直接设置mac?),最终还是把host里的set mac给取消了, 让vm自己搞去吧

实际看了bnx2x驱动后发现,理论上是可以支持VM里设置MAC的:对VF设置mac,流程:ndo_set_mac_address -> bnx2x_vfpf_config_mac -> 发送CHANNEL_TLV_SET_Q_FILTERS给PF(bnx2x_send_msg2pf), PF收到msgbnx2x_vf_mbx_request -> bnx2x_vf_mbx_set_q_filters -> bnx2x_filters_validate_mac, 在bnx2x_filters_validate_mac里, 发现mac已经被初始化过后, 会直接返回EPERM, 所以直接在最后的判断里跳过, 或者参考intel的驱动增加trust mode(struct vf_data_storage->trusted)支持就能对vfip link set xx vf xx trust on支持vm里改mac了,当然这只是理论上,暂时没有强烈sriov需求, 以后再考虑吧, 说不定啥时候驱动就更新了

0x02 CX341A折腾记录

想了解怎么自定义固件, 可以翻一下下一节的CX3 ALOM记录

买了CX341A的改双口版本, 折腾了半天, 走了很多弯路, google找cx3刷固件的流程, 很多资料还是会给出有fw-ConnectX3-rel.mlx自定义固件的方法,实际上最新的固件工具里都已经取消自定义的支持了, 在一个官方支持里有说明, 是说为了更快速支持,减少问题产生, 所以对于CX341A, 你可以直接用最新固件. 弯路太多, 直接说结论:

下载OFED驱动NVIDIA官网, 注意cx3要用LTS download, 新版本已经没有cx3/pro的支持了 下载后解压/挂载, 我是tgz解压, cd 进去, 执行./mlnxofedinstall --skip-distro-check, 使用--skip-distro-check是因为可能会因为系统小版本和你下载的不一样而报错, 另外如果没有apt-get命令, 可以修改安装脚本里的apt-get直接替换为apt 安装完成后/etc/init.d/openibd restart 然后执行mst start, 再执行mst status会看到输出, 新目录/dev/mst有两个设备/dev/mst/mt4099_pciconf0和/dev/mst/mt4099_pci_cr0 从官网下载341的固件nvidia, 直接下载最新固件, 然后执行flint -d 01:00.0 -i fw-ConnectX3-rel-2_42_5000-MCX341A-XCC_Ax-UEFI-14.11.45-FlexBoot-3.4.752.bin burn 其中01:00.0表示lspci里你的网卡pci地址, 等刷写完成 完成后执行mstflint -d 01:00.0 q 可以看到版本信息 12345678910111213root@debian10:~# mstflint -d 01:00.0 qImage type: FS2FW Version: 2.42.5000FW Release Date: 5.9.2017Product Version: 02.42.50.00Rom Info: type=UEFI version=14.11.45 cpu=AMD64 type=PXE version=3.4.752Device ID: 4099Description: Node Port1 Port2 Sys imageGUIDs: 0002c90300056aa8 0002c90300056aa9 0002c90300056aaa 0002c90300056aabMACs: 0002c9dc8b5c 0002c9dc8b5dVSD:PSID: MT_1680110023 至此固件刷新完成, 目前就可以直接重启然后在启动rom的时候Ctrl+B修改配置支持SR-IOV了(当然是我后来才发现的,,,) 执行mlxconfig -d /dev/mst/mt4099_pciconf0 set SRIOV_EN=1 NUM_OF_VFS=4 直接开启sr-iov支持 至此CX341A就支持SR-IOV了,当然只是支持, 要开启VF还需要额外的配置, 因为mlx4驱动较老了, 没有增加sysfs的支持, 只能在modprobe的时候调整驱动参数来启用SR-IOV === 以下为SR-IOV配置 === vim /etc/modprobe.d/mlx4.conf 写一行options mlx4_core port_type_array=2,2 num_vfs=0,0,4 probe_vf=0,0,4, 这个参数意义参考官方文档NVIDIA SR-IOV文档(貌似有很多pdf版本, 其实都差不多), 我解释一下我的参数: port_type_array=2,2表示两个网口都以太网模式, num_vfs=0,0,4表示生成4个双口vf,也就是网口1有2个vf网口2有2个vf, probe_vf直接配置和num_vfs一样即可,看说明是用来探测网口的,实际效果不太明白 这样重启后为的系统就会有6个interface, PF: enp65s0 enp65s0d1, VF:enp65s0v0 enp65s0v1 enp65s0d1v0 enp65s0d1v1 实际使用因人而异, 我是因为打算VM里bonding才每个口都开了VF 0x03 CX3 ALOM折腾记录

网卡物料号: 682148-B21, 版本rev A3, 不确定其他型号是否一样(理论应该可以)

吐槽一个, 闲鱼上买的, 最大的槽点就是, 光口笼子竟然生锈了, 这。。。这个网卡固件到手版本(2.7xxx)太老, mlxconfig直接告诉我版本太低不支持配置, 看来还是直接升级吧

翻了好多网站没有找到HPE的升级方式, 网卡太老了, 很多资料不太好找, 最接近的servethehome答案里, 有一个固件, 我刷了后直接ping不通了, 最终还是决定要不然不升固件了要不然就自定义固件升级, 想了很多歪招, 终于自定义成功了

流程记录:

=== 备份一下网卡固件/配置 (建议按照这个来备份, 我之前找的一个资料比这个备份的少, 当然其实应该问题不大) ==== 参考这个吧1234567891011121314151617181920212223242526272829#mst status#MST devices:#------------#mt4099_pci_cr0#mt4099_pciconf0#1. Save basic info such as GUIDs, MACs, etc.:flint -d query full > flint_query.txt#2. Save low-level flash chip info:flint -d hw query > flint_hwinfo.txt#3. Save existing FW:flint -d ri orig_firmware.bin#4. Save existing FW configuration:flint -d dc orig_firmware.ini#5. Save existing PXE ROM image (if any):flint -d rrom orig_rom.bin#6. Save existing PCI VPD (vital product data):mlxburn -d -vpd > orig_vpd.txt === 开始自定义固件 ==== 最重要的文件就是我们缺少mlx固件文件, 在看各种资料的时候发现mellanox有一个网址还是可用的, 没有被nvidia给关了, http://contenllanox.com/firmware/, 于是在各种尝试下, 找到了最接近新固件的一个版本http://contenllanox.com/firmware/ConnectX3-rel-2_40_5030.tgz, 2.42版本固件是真的没有找到, 这个理论也不差多少 下一个难题是要找到支持自定义固件的MFT, 通过文档发现4.9的版本mft是可以自定义固件的,经过尝试找到了这个https://linux.mellanox.com/public/repo/mlnx_ofed/4.3-3.0.2.1/ubuntu18.04/x86_64/mft-4.9.0-38.amd64.deb https://linux.mellanox.com/public/repo/mlnx_ofed/4.3-3.0.2.1/ubuntu18.04/x86_64/kernel-mft-dkms_4.9.0-38_all.deb这两个deb包直接安装之后, 继续下面操作 解压固件tar -xvzf ConnectX3-rel-2_40_5030.tgz -C cx3 复制配置cd cx3;cp ../orig_firmware.ini ./hpe.ini 生成固件mlxburn -fw fw-ConnectX3-rel.mlx -conf hpe.ini --wrimage test-hpe.bin 验证一下flint -i test-hpe.bin verify 刷入固件flint -d 01:00.0 -i test-hpe.bin burn 确认一下mlxconfig -d /dev/mst/mt4099_pciconf0 q版本是最新版本

至此折腾结束, 把蜗牛星际钻了个孔用来透出来光口, 不完美的完成了万兆

坑 (TODO)

CX3 ALOM为什么不配置SR-IOV, 因为用mlxconfig配置的时候会报错, 不支持开启sriov, 用了官方的文档改ini也不行, 所以暂时放弃了, 现在被我插ESXi里桥接用, mtu9000后10gb测试正常

0x04 配置

目前配置:

530FLR用在EPYC 为了测试LACP, CX341A临时用在ESXi上, 直通给Debian 交换机里配置4个光口两个一组LACP, 分别接两个机器, Debian里全部配置layer3+4成类似123456789101112131415161718192021auto enp1s0f0iface enp1s0f0 inet manualauto enp1s0f1iface enp1s0f1 inet manualauto bond0iface bond0 inet manual bond-slaves enp1s0f0 enp1s0f1 bond-miimon 100 bond-mode 802.3ad bond-xmit-hash-policy layer3+4 mtu 9000auto br0iface br0 inet static address 192.168.3.123/24 gateway 192.168.3.1 bridge-ports bond0 bridge-stp off mtu 9000 后来发现CX341A太厚, 目前还是在蜗牛里用了CX3 ALOM单口万兆, ESXi桥接, 配置MTU9000后, 测速9.8+gbps 0x05 测试ping测试MTU生效

使用类似如下命令,可测试本地网卡MTU是否大于网络MTU。ping -s 8900 -M do 192.168.10.22通过上述命令,发送大小包大小是8900(+28)=8928字节,禁止路由器拆分数据包。 至于(+28)字节,是因为8字节的“ICMP回显示请求和回显应答报文格式长度”,以及20字节的“IP首部”。对于测试的结果,其含义如下。

如果正常回复,说明数据包大小不超过网络允许最大MTU; 如果没正常回复,说明数据包大小超过了网络限定的MTU大小,需要减小探测包大小再次尝试。 iperf3测试

一端iperf3 -s另一端iperf3 -c 192.168.3.159, 这样测试万兆就够了

如果是LACP的测速, 需要客户端配置iperf3 -c 192.xxx -P5, 多线程测速, 如果配置了Layer3+4, 就能达到19.8+Gbps的速度.

ESXi7的shell里也可以直接/usr/lib/vmware/vsan/bin/iperf3, 需要提前关闭防火墙esxcli network firewall set --enabled false

0x06 结束

重点记录一下网卡固件的使用, 备忘

0x07 参考 Mellanox HowTo Configure SR-IOV VFs on Different ConnectX-3 Ports Mellanox HowTo Configure SR-IOV for ConnectX-3 with KVM (Ethernet) serverthehome Looking for a Connectx-3 custom firmware package serverthehome HP 10Gb MLX 1P SFP+ CX3 ALOM Adapter FW update? NVIDIA Single Root IO Virtualization (SR-IOV) NVIDIA NVIDIA Firmware Tools (MFT) Blog iPerf now available on ESXi

文章内容遵循 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议

本文永久链接是:https://totoro.tech/posts/743bff95.html

转载时,请注明文章来源!



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有